#ifndef _USMART_FIFO_H
#define _USMART_FIFO_H


#include "usmart.h"


typedef struct {
    uint16_t deepth;
    uint16_t occupy;
    uint8_t *array;
    uint8_t *limit;
    uint8_t *wp;
    uint8_t *rp;
}fifo_t;

void fifo_init(fifo_t *fifo, uint8_t *array, uint16_t deepth);
void reset_fifo(fifo_t *fifo);
uint8_t write_fifo(fifo_t *fifo, uint8_t ch);
uint8_t write_fifos(fifo_t *fifo, uint8_t *ch, uint16_t size);
uint8_t read_fifo(fifo_t *fifo, uint8_t *ch) ;
uint8_t read_fifos(fifo_t *fifo, uint8_t *ch, uint16_t size) ;
uint8_t is_fifo_empty(fifo_t *fifo);
uint8_t is_fifo_full(fifo_t *fifo);

#endif

